home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / tvtome.ifs < prev    next >
Text File  |  2005-03-13  |  9KB  |  282 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=Alex Iribarren     (<link>alexiri@terra.es</link>)
  8. Title=TV Tome / StarGate SG-1
  9. Description=StarGate SG-1 TV Tome import
  10. Site=http://www.tvtome.com
  11. Language=EN
  12. Version=04/04/2004
  13. Requires=3.5.0
  14. Comments= Modified version of IMDB batch import
  15. License=This program is free software; you can redistribute it and/or modify it under the  terms of the GNU General Public License as published by the Free Software Foundation;  either version 2 of the License, or (at your option) any later version. |
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program TvTome;
  23.  
  24. //Constants
  25. Const
  26.   AddNotes = true;
  27.  
  28. var
  29.   EpName, EpNumber: string;
  30.   MovieName: string;
  31.  
  32. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  33. var
  34.   i: Integer;
  35. begin
  36.   result := -1;
  37.   if StartAt < 0 then
  38.     StartAt := 0;
  39.   for i := StartAt to List.Count-1 do
  40.     if Pos(Pattern, List.GetString(i)) <> 0 then
  41.     begin
  42.       result := i;
  43.       Break;
  44.     end;
  45. end;
  46.  
  47. procedure AnalyzePage(Address: string);
  48. var
  49.   Page: TStringList;
  50.   LineNr, StartPos: Integer;
  51.   Line, Season: string;
  52. begin
  53.   Page := TStringList.Create;
  54.   Page.Text := GetPage(Address);
  55.  
  56.   PickTreeClear;
  57.   PickTreeAdd('Searching for ' + EpName, '');
  58.   LineNr := 0;
  59.   Address := '';
  60.  
  61.   repeat
  62.     LineNr := FindLine('<tr><td colspan="6"><', Page, LineNr);
  63.     if LineNr > -1 then
  64.     begin
  65.       Line := Page.GetString(LineNr);
  66.       StartPos := pos('<b>', Line) + 3;
  67.       Season := copy(Line, StartPos, pos('</b>', Line) - StartPos);
  68.       PickTreeAdd(Season + ':', '');
  69.       Address := AddEpisodeTitles(Page, LineNr);
  70.       if (Address <> '') then Break;
  71.       LineNr := LineNr + 1;
  72.     end;
  73.   until (LineNr < 0);
  74.  
  75.   if (Address <> '') then
  76.   begin
  77.     AnalyzeEpisodePage(Address);
  78.   end else begin
  79.     if PickTreeExec(Address) then
  80.       AnalyzeEpisodePage(Address);
  81.   end;
  82.   Page.Free;
  83. end;
  84.  
  85. procedure AnalyzeEpisodePage(Address: string);
  86. var
  87.   Line, TempStr: string;
  88.   BeginPos: Integer;
  89.   Page: TStringList;
  90.   LineNr: Integer;
  91. begin
  92.   Page := TStringList.Create;
  93.   Page.Text := GetPage(Address);
  94.  
  95.   // URL
  96.   SetField(fieldURL, Address);
  97.  
  98.   // Episode Number
  99.   if EpNumber <> '' then
  100.     SetField(fieldTranslatedTitle, EpNumber);
  101.  
  102.   // Original Title
  103.   LineNr := FindLine('<table width=777><tr><td align=center>', Page, 0)+1;
  104.   Line := Page.GetString(LineNr);
  105.   CutAfter(Line,'<h1>');
  106.   SetField(fieldOriginalTitle, copy(Line, 1, pos('</h1>',Line)-1));
  107.  
  108.   // First Aired
  109.   LineNr := FindLine('>First Aired<', Page, 0);
  110.   Line := Page.GetString(LineNr);
  111.   CutAfter(Line,'First Aired</td><td class="row');
  112.   SetField(fieldComments, 'First aired: ' + copy(Line, 4, pos('</td></tr>',Line)-4));
  113.   SetField(fieldYear, copy(Line, pos(', ',Line)+2, 4));
  114.  
  115.   // Rating
  116.   LineNr := FindLine('nowrap>Avg. Rating:</td>', Page, 0);
  117.   Line := Page.GetString(LineNr);
  118.   TempStr := Line + #13#10;
  119.   CutAfter(Line,'</td><td>');
  120.   SetField(fieldRating,copy(Line, 1, pos('.',Line)-1));
  121.   LineNr := FindLine('nowrap>Votes Cast:</td>', Page, 0);
  122.   Line := Page.GetString(LineNr);
  123.   TempStr := TempStr + Line + #13#10;
  124.   Line := Page.GetString(LineNr + 1);
  125.   TempStr := TempStr + Line + #13#10;
  126.   TempStr := StringReplaceAll(TempStr, '</td><td>', ' ');
  127.   HTMLRemoveTags(TempStr);
  128.   SetField(fieldComments, GetField(fieldComments)
  129.       + #13#10'-------------------------------------------------------------------------------'#13#10
  130.       +'RATINGS:' + #13#10 + TempStr);
  131.  
  132.   // Production Code
  133.   LineNr := FindLine('>Production Code<', Page, 0);
  134.   Line := Page.GetString(LineNr);
  135.   CutAfter(Line,'Production Code</td><td class="row2">');
  136.   IF Line <> '' then SetField(fieldMedia,'Production Code: ' + copy(Line, 1, pos('</td></tr>',Line)-1));
  137.  
  138.   // Writer
  139.   LineNr := FindLine('>Writer<', Page, 0);
  140.   Line := Page.GetString(LineNr);
  141.   CutAfter(Line,'<nobr>');
  142.   TempStr := copy(Line, 1, pos('</nobr><br></td></tr>',Line)-1);
  143.   HTMLRemoveTags(TempStr);
  144.   SetField(fieldProducer, 'Writer: ' + TempStr);
  145.  
  146.   // Director
  147.   LineNr := FindLine('>Director<', Page, 0);
  148.   Line := Page.GetString(LineNr);
  149.   CutAfter(Line,'<nobr>');
  150.   TempStr := copy(Line, 1, pos('</nobr><br></td></tr>',Line)-1);
  151.   HTMLRemoveTags(TempStr);
  152.   SetField(fieldDirector, TempStr);
  153.  
  154.   // Guest Stars
  155.   LineNr := FindLine('<b>Guest Stars:</b>', Page, 0) + 1;
  156.   TempStr := Page.GetString(LineNr-1);
  157.   repeat
  158.     Line := Page.GetString(LineNr);
  159.     TempStr := TempStr + copy(Line, pos('">',Line) + 2, pos('</nobr>',Line)) + #13#10;
  160.     LineNr := LineNr + 1;
  161.   until (pos('</td></tr>', Line) > 0);
  162.   HTMLRemoveTags(TempStr);
  163.   SetField(fieldActors, TempStr);
  164.  
  165.   // Description
  166.   LineNr := FindLine('<a name="synopsis">', Page, 0);
  167.   LineNr := FindLine('<tr><td>', Page, LineNr) + 1;
  168.   TempStr := '';
  169.   repeat
  170.     Line := Page.GetString(LineNr);
  171.     TempStr := TempStr + Line;
  172.     LineNr := LineNr + 1;
  173.   until (pos('</td></tr>', Line) > 0);
  174.   TempStr := StringReplaceAll(TempStr, '<br>', #13#10);
  175.   HTMLRemoveTags(TempStr);
  176.   
  177.   // Notes
  178.   if AddNotes then
  179.   begin
  180.     LineNr := FindLine('<a name="notes">', Page, 0);
  181.     LineNr := FindLine('<tr><td>', Page, LineNr) + 1;
  182.     TempStr := TempStr + #13#10#13#10;
  183.     repeat
  184.       Line := Page.GetString(LineNr);
  185.       TempStr := TempStr + Line;
  186.       LineNr := LineNr + 1;
  187.     until (pos('</td></tr>', Line) > 0);
  188.     TempStr := StringReplaceAll(TempStr, '<br>', #13#10);
  189.     TempStr := StringReplaceAll(TempStr, '<li>', #13#10#43#32);
  190.     HTMLRemoveTags(TempStr);
  191.   end;
  192.  
  193.   // Add Description to database
  194.   SetField(fieldDescription, TempStr);
  195.  
  196.   Page.Free;
  197.   //DisplayResults;
  198. end;
  199.  
  200.  
  201.  
  202. function AddEpisodeTitles(Page: TStringList; var LineNr: Integer): string;
  203. var
  204.   Line: string;
  205.   EpTitle, EpAddress, TempNum: string;
  206.   StartPos: Integer;
  207. begin
  208.   Result := '';
  209.   repeat
  210.     LineNr := LineNr + 1;
  211.     Line := Page.GetString(LineNr);
  212.     StartPos := pos('</td><td nowrap valign=top class="small"> ', Line);
  213.     //Feature Movie add need it code
  214.     if StartPos = 0 then
  215.         Begin
  216.           StartPos := pos('</td><td nowrap class="small"> ', Line);
  217.           if StartPos > 0 then StartPos := StartPos + 31
  218.         end
  219.       else
  220.         StartPos := StartPos + 42;
  221.     if StartPos > 0 then
  222.     begin
  223.       TempNum := copy(Line, StartPos, pos('-', Line) - StartPos);
  224.       EpNumber := 'S';
  225.       If Length(TempNum) < 2 then EpNumber := EpNumber + '0';
  226.       EpNumber := EpNumber + TempNum;
  227.      
  228.       CutAfter(Line,'-');
  229.       TempNum := copy(Line, 1, pos('<', Line) - 1);
  230.       EpNumber := EpNumber + 'E';
  231.       If Length(TempNum) < 2 then EpNumber := EpNumber + '0';
  232.       EpNumber := EpNumber + TempNum;
  233.  
  234.       CutAfter(Line,'href="');
  235.       EpAddress := copy(Line, 1, pos('">', Line) - 1);
  236.       StartPos := pos('">', Line) + 2;
  237.       EpTitle := copy(Line, StartPos, pos('</a>', Line) - StartPos);
  238.       HTMLDecode(EpTitle);
  239.       if (pos(EpName,EpTitle) > 0) then
  240.       begin
  241.         Result := 'http://www.tvtome.com' + EpAddress;
  242.         Break;
  243.       end;
  244.       PickTreeAdd(EpNumber + ': ' + EpTitle, 'http://www.tvtome.com' + EpAddress);
  245.     end;
  246.     if Result <> '' then Break;
  247.   until ((pos('<tr><td colspan="6"> </td></tr>', Line) > 0) or (pos('</table>', Line) > 0));
  248. end;
  249.  
  250. procedure CutAfter(var Str: string; Pattern: string);
  251. begin
  252.   Str := Copy(str, Pos(Pattern, Str) + Length(Pattern), Length(Str));
  253. end;
  254.  
  255. function StringReplaceAll(S, Old, New: string): string;
  256. begin
  257.   while Pos(Old, S) > 0 do
  258.     S := StringReplace(S, Old, New);
  259.   Result := S;
  260. end;
  261.  
  262. begin
  263.   if CheckVersion(3,5,0) then
  264.   begin
  265.     if (GetField(fieldURL) <> '') then
  266.       AnalyzeEpisodePage(GetField(fieldURL))
  267.     else
  268.       begin
  269.         EpName := GetField(fieldOriginalTitle);
  270.         if (EpName = '') then
  271.           EpName := GetField(fieldTranslatedTitle);
  272.       end;
  273.     if (EpName = '') then Input('TV Tome Import', 'Enter the title of the episode:', EpName);
  274.       //AnalyzePage('http://www.tvtome.com/tvtome/servlet/EpisodeGuideServlet/showid-249/'); // Futurama
  275.       //AnalyzePage('http://www.tvtome.com/Simpsons/eplist.html'); // The Simpsons
  276.       AnalyzePage('http://www.tvtome.com/StargateSG1/eplist.html'); // Stargate SG-1
  277.       //AnalyzePage('http://www.tvtome.com/tvtome/servlet/EpisodeGuideServlet/showid-5382/'); // Garfield
  278.   end else
  279.   ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  280. end.
  281.  
  282.